iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0

在介紹完雙重指標以後,那麼今天來介紹陣列與指標上的應用
那麼一樣照慣例以例子搭配圖會比較好理解

void f(int **rr, int **pp, int a[], int *p, int *aa[]){
    
    int *q;
    int *b[3];
    q = p;
    p = aa[0];
    b[1] = *(a+1);
    a[1] = (**rr) + (*p) + (*(a+2));
    *pp = p + 1;
    *rr = *pp + 1;
    *(a+1) = **pp + a[*p-3];
    *(a+2) = **rr + **pp;
}
int main(){
    int a[]={1,3,5,7,9};
    int *p = a+1,*q=a+2;
    int **pp=&p;
    int *b[3];
    b[0]=p;
    b[1]=a+2;
    a[2]=a+3;
    f(pp,&q,a+2,p,b);
    
}

這邊我們一樣拆成兩個部分來講解
第一部分是main body的變數宣告以及傳到Function f後的變數宣告
可以看到這邊稍微複雜一點,是陣列及指標的搭配使用
其中這邊會看到一個新朋友(?

int *b[3];
這個看似陣列又有指標的東西是什麼呢?
其實他就是陣列但是元素是指標資料型態

跟int a[]={1,3,5,7,9};不太一樣
這一樣是陣列但是元素是整數資料型態

https://ithelp.ithome.com.tw/upload/images/20220923/20152495DQF1a4lBtd.jpg

第二部分呢則是進去Function f後的變數設定
為橘色的線
我將它分為8個step

  1. q = p;
  2. p = aa[0];
  3. b[1] = *(a+1);
  4. a[1] = (**rr) + (p) + ((a+2));
  5. *pp = p + 1;
  6. *rr = *pp + 1;
  7. *(a+1) = **pp + a[*p-3];
  8. *(a+2) = **rr + **pp;
    https://ithelp.ithome.com.tw/upload/images/20220924/20152495I3CFPwcGyP.jpg

上一篇
[Day7]指標2 and 傳值(by value)及傳址(by reference or by address)
下一篇
[Day9]堆疊Stack
系列文
環島C一下自己的人生24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言